import Collection from "../core/Collection";

/**
 * 设计用于在处理之前保存元素的集合。除了基本的Collection操作之外，队列还提供额外的提取{@link Queue#po]l}和检查{@link Queue#peek}操作。
 *
 * 队列通常但不一定以 FIFO（先进先出）方式对元素进行排序。
 *
 * 无论使用何种顺序，队列的头部都是将通过调用{@link Queue#remove()}或{@link Queue#poll()}删除的元素。在FIFO队列中，所有新元素都插入到
 * 队列的尾部。其他类型的队列可能使用不同的放置规则。
 *
 * 每个Queue实现都必须指定其排序属性。
 *
 * @param E 需要存入此队列的元素类型
 * @see Collection
 * @version 1.0
 */
export default interface Queue<E> extends Collection<E> {

  /**
   * 检索并移除此队列的头部，如果此队列为空，则返回undefined。
   *
   * @return {E | undefined} 此队列的头部元素，若此队列为空则返回undefined
   * @version 1.0
   */
  poll(): E | undefined;

  /**
   * 检索但不删除此队列的头部，如果此队列为空，则返回undefined。
   *
   * @return {E | undefined} 此队列的头部元素，若此队列为空则返回undefined
   * @version 1.0
   */
  peek(): E | undefined;
}
